import Mock from 'mockjs'
import config from '@/request/config'
import * as login from './modules/login'
import * as personal from './modules/personal'
import * as logsVisit from './modules/logs-visit'
import * as sysuser from './modules/sys-user'
import * as notice from './modules/sys-notice'
import * as appuser from './modules/app-user'
import * as approle from './modules/app-role'
import * as appdept from './modules/app-dept'
import * as appresource from './modules/app-resource'
import * as logsOperation from './modules/logs-operation'

const { baseURL } = config
// 1. 开启/关闭所有模块拦截, 通过openMock开关设置.
// 2. 开启/关闭单个模块拦截, 通过调用mock方法isOpen参数设置.
// 3. 开启/关闭模块中某个请求拦截, 通过函数返回对象中的isOpen属性设置.
const openMock = true

mockAll(
  [
    login,
    personal,
    logsVisit,
    sysuser,
    notice,
    appuser,
    approle,
    appdept,
    appresource,
    logsOperation
  ],
  openMock
)

// 对所有的内容进行模拟
function mockAll(modules, isOpen = true) {
  for (const k in modules) {
    mock(modules[k], isOpen)
  }
}
/**
 * 创建mock模拟数据
 * @param {*} mod 模块
 * @param {*} isOpen 是否开启?
 */
function mock(mod, isOpen = true) {
  if (isOpen) {
    for (var key in mod) {
      ;((res) => {
        if (res.isOpen !== false) {
          let url = baseURL
          if (!url.endsWith('/')) {
            url = url + '/'
          }
          url = url + res.url
          Mock.mock(new RegExp(url), res.method, (opts) => {
            opts.data = opts.body ? JSON.parse(opts.body) : null
            const resData = Mock.mock(
              typeof res.response === 'function' ? res.response(opts) : res.response
            )
            console.log('%cmock拦截, 请求: ', 'color:blue', opts)
            console.log('%cmock拦截, 响应: ', 'color:blue', resData)
            return resData
          })
        }
      })(mod[key]() || {})
    }
  }
}
